[XEND] balloon enough memory to enable shadow mode before live migration.a
authorTim Deegan <tim.deegan@xensource.com>
Fri, 8 Sep 2006 17:55:53 +0000 (18:55 +0100)
committerTim Deegan <tim.deegan@xensource.com>
Fri, 8 Sep 2006 17:55:53 +0000 (18:55 +0100)
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendDomainInfo.py

index 10f9c3b6e08979f7e2b5dfda0598db553c288bc5..e9eb8981d2b6560420117410191f35bcdc3b4bce 100644 (file)
@@ -420,6 +420,10 @@ class XendDomain:
         """ The following call may raise a XendError exception """
         dominfo.testMigrateDevices(True, dst)
 
+        if live:
+            """ Make sure there's memory free for enabling shadow mode """
+            dominfo.checkLiveMigrateMemory()
+
         if port == 0:
             port = xroot.get_xend_relocation_port()
         try:
index 033d92ffc48cdf22e12506b968bf5902d7b5a858..6a7ad82f9ab529b31ec8df153b99eba8f72397d2 100644 (file)
@@ -49,6 +49,7 @@ from xen.xend.xenstore.xstransact import xstransact, complete
 from xen.xend.xenstore.xsutil import GetDomainPath, IntroduceDomain
 from xen.xend.xenstore.xswatch import xswatch
 
+from xen.xend import arch
 
 """Shutdown code for poweroff."""
 DOMAIN_POWEROFF = 0
@@ -1503,6 +1504,19 @@ class XendDomainInfo:
 
     ## public:
 
+    def checkLiveMigrateMemory(self):
+        """ Make sure there's enough memory to migrate this domain """
+        overhead_kb = 0
+        if arch.type == "x86":
+            # 1MB per vcpu plus 4Kib/Mib of RAM.  This is higher than 
+            # the minimum that Xen would allocate if no value were given.
+            overhead_kb = self.info['vcpus'] * 1024 + self.info['maxmem'] * 4
+            overhead_kb = ((overhead_kb + 1023) / 1024) * 1024
+            # The domain might already have some shadow memory
+            overhead_kb -= xc.shadow_mem_control(self.domid) * 1024
+        if overhead_kb > 0:
+            balloon.free(overhead_kb)
+
     def testMigrateDevices(self, network, dst):
         """ Notify all device about intention of migration
         @raise: XendError for a device that cannot be migrated